/*
Date:20210601 0:22
key:首先这个路径是指根到叶子节点，这里就采取dfs每一个节点的值加起来，如果走到了空节点就清算。
    即走到叶子节点就挑左右其中一个进去。非叶子节点就看子树不空就进去。记得进去出来要pop
 */
class Solution {
public:
    void pathSum(TreeNode* root, int&target,int now,vector<int>&v,vector<vector<int>>&v1) 
    {
        //是叶子节点就清算
        if(root==nullptr)
        {
            if(now==target)
            {
                v1.push_back(v);
            }
            else{return;}
        }
        else
        {
            v.push_back(root->val);
            if(root->left==nullptr&&root->right==nullptr)
            {
                pathSum(root->right, target,now+root->val,v,v1);
                v.pop_back();return;
            }
            if(root->left!=nullptr)
            {
                pathSum(root->left, target,now+root->val,v,v1);
            }
            if(root->right!=nullptr)
            {
                pathSum(root->right, target,now+root->val,v,v1);
            }
            v.pop_back();
        }


    }
    vector<vector<int>> pathSum(TreeNode* root, int target) 
    {
        vector<vector<int>>v1;
        vector<int>v;

        if(root!=nullptr)
        {
            pathSum(root, target,0,v,v1);
        }
        
        return v1;
    }
};